package cn.juque.jdfsystem.service;

import cn.juque.common.base.PageInfo;
import cn.juque.jdfsystem.bo.FileInfoSaveBO;
import cn.juque.jdfsystem.domain.FileInfoDO;
import cn.juque.jdfsystem.entity.FileInfo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @author JUQUE
 * @version 1.0.0
 * <ul>
 *  <li>simple-generator</li>
 *  <li>文件信息</li>
 * </ul>
 * @date 2023-01-09 10:55:50
 **/
public interface IFileInfoService {

    /**
     * 查询
     *
     * @param fileInfo fileInfo
     * @return List<FileInfo>
     */
    List<FileInfoDO> listInfoWithoutPage(FileInfoDO fileInfo);

    /**
     * 分页查询
     *
     * @param pageInfo pageInfo
     * @param fileInfo fileInfo
     * @return DataGrid<FileInfo>
     */
    List<FileInfoDO> listInfoWithPage(PageInfo pageInfo, FileInfoDO fileInfo);

    /**
     * 详情
     *
     * @param id        主键
     * @param checkFile 检查文件是否存在
     * @return FileInfo
     */
    FileInfo detail(String id, Boolean checkFile);

    /**
     * 批量获取文件信息
     *
     * @param fileIds 文件id列表
     * @return list
     */
    List<FileInfo> detailFileByIds(List<String> fileIds);

    /**
     * 查找文件所在机器
     *
     * @param fileId 文件id
     * @return list
     */
    List<String> findIp(String fileId);

    /**
     * 保存
     *
     * @param saveBO 文件信息
     * @return fileId
     */
    String saveInfo(FileInfoSaveBO saveBO);

    /**
     * 保存文件到磁盘
     *
     * @param fileInfo 信息
     * @param b        文件流
     */
    void saveFile(FileInfo fileInfo, byte[] b);

    /**
     * 删除
     *
     * @param ids 主键列表
     * @return list
     */
    List<FileInfo> deleteInfo(List<String> ids);

    /**
     * 变更文件状态
     *
     * @param platformId 平台ID
     * @param validList   变更为有效的文件id
     * @param inValidList 变更为无效的文件id
     */
    void trustFile(String platformId, List<String> validList, List<String> inValidList);

    /**
     * 转型
     *
     * @param file       MultipartFile
     * @param platformId 平台ID
     * @param scope      范围域
     * @return FileInfoSaveBO
     * @throws IOException IOException
     */
    FileInfoSaveBO toFileInfo(MultipartFile file, String platformId, Integer scope) throws IOException;

    /**
     * 创建文件路径
     * @param date 日期YYYYMMDD
     * @return string
     */
    String createServerPath(String date);
}
